package 方法引用;
/*
* 如果我们在Lambda中所指定的操作方案，已经有地方存在相同方案，那是否还有必要再写重复逻辑呢？答案肯定是没有必要
* 那我们又是如何使用已经存在的方案的呢？
* 这就是我们要讲解的方法引用，我们是通过方法引用来使用已经存在的方案
* */
public class 体验方法引用 {
    public static void main(String[] args) {
        /*1.在主方法中调用usePrintable()方法*/
        usePrintable((String s)->{
            System.out.println(s);
        });
        /*Lambda简化写法*/
        usePrintable(s->{
            System.out.println(s);
        });

        /*方法引用*/
        /*
        * :: 该符号为引用运算符，而它所在的表达式被称为方法引用
        * 使用Lambda表达式，根据可以推导可以省略的原则，无需指定参数类型，也无需要指定重载的形式，它们都将被自动推导
        * 如果使用方法引用，也是同样可以根据上下文进行推导
        * 方法引用时Lambda的孪生兄弟
        * */
        usePrintable(System.out::println);
    }
    private static void usePrintable(Printable p){
        p.printString("爱生活爱java");
    }
}
interface Printable{
    void printString(String s);
}